#pragma once

#include <iostream>
#include <memory>
#include <string>
#include <mutex>
#include <tuple>
#include "base/Bytes.h"
#include <sw/redis++/redis++.h>
#include "utils/utils.h"

namespace zeroplus::mq
{
    // 可以基于streams实现，根据消息id获取pel的重新投递次数，超过阈值则放入DLQ
    class DeadLetterQueue
    {
    private:
        std::shared_ptr<sw::redis::Redis> redis_;
        std::string topic_;

    public:
        DeadLetterQueue(std::shared_ptr<sw::redis::Redis> redisFd);
        ~DeadLetterQueue();
        // 创建topic队列
        std::string CreateStreams();
        // 从redis stream中写入数据
        std::string WriteToStorage(const std::string &messageId, const Bytes &message);
        // 检查key是否存在
        long long IsTopicExists(const std::vector<std::string> &topicList);
    };
}
